﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RayDen.Library.Components.Color.Types;
using RayDen.Library.Components.Surface;
using RayDen.Library.Core.Primitives;

namespace RayEngine.Spectral.Entities
{
    public abstract class BrdfBase
    {
        public bool TransparentShadows { get; set; }
        public string Name { get; set; }
        public abstract BrdfType Type { get; }
        public abstract BrdfClass Class { get; }

        public abstract void F(ShadePointInfo pt, out IColorType fs, BrdfType types = BrdfType.Diffuse);

        public abstract void Sample_f(ShadePointInfo point, float u0, float u1, float u2, out Vector vector, 
                                      out float radiancePdf, out float pdf1, out BsdfEvent @event);
        public abstract float Pdf(ref Vector wo, ref Vector wi);
    }
}
